The present invention relates to the control of RAID storage, and particularly to the transformation of RAID storage in a virtualized storage environment.
In a storage system where data is stored on one or more redundant arrays of independent disks (RAID), parameters such as the number of disks in the RAID, the size of the disks in the RAID and the RAID level used are usually fixed at array creation time. Once an array has been created and data has been stored in it, it is usually not possible to change any of these parameters without deleting the array, destroying all the data, and recreating the array with the new parameters.
Some conventional storage systems allow limited expansion of an array, e.g., from an array using RAID-5 with five disks to an array using RAID-5 with 8 disks. However, this is currently accomplished by putting new capacity contiguously on the three new disks, and then recalculating the parity that already exists on the original five disks. Unfavorably, the new data is not striped across the array, and therefore the new disks do not contribute to the parity overhead, which ultimately means the performance of systems created using this method is inferior to that of freshly created RAID-5 arrays with the same number of disks. Moreover, some conventional storage systems allow expansion from RAID-5 to RAID-6 with the addition of a single disk, but even in cases allowing such an expansion, this is the only transformation allowed.
One conventional example of a facility for expanding an array by adding one or more new disks is disclosed in published PCT Patent Appl. No. WO 2004/036424, which describes the transformation of an array to take advantage of the additional disk resource by a mechanism that scatters a subset of the existing data across the new disk space and subsequently inserts data in the remaining new disk space. Disadvantageously, one consequence of such conventional approaches is that the layout of the data is substantially changed in the post-transformation array.
In other methods, it is possible to perform transformations of an in-use array using RAID by reserving extents in each array upon creation of the array, and furthermore ensuring that the reserved extents are isolated from normal use, such that they can be brought into use during an array transformation. In this type of transformation, the system uses the reserved extents from the array to create a destination for data being moved as part of the transformation. Once the data is moved, the previous storage location is free for use, and is utilized as the destination for subsequent data to be moved, and so on, in the manner of a “sliding window.” However, in this approach, there is the unfortunate potential for mismatch between RAID stripes and underlying extents. Thus, when employing this methodology, the at least three extents should be statically reserved on each array. The number of reserved extents may also be increased to allow the transformation system to increase the number of extent migrations in progress at any one time.
While the ability to perform array transformations in this way is advantageous in systems of limited size, in large-scale systems, a concomitant disadvantage exists. The primary drawback of requiring statically reserved extents on each array from the time of its creation is that the number of reserved extents may only be chosen at array creation time, and cannot be specified or reserved at a later time. Moreover, once the reserve extents are created, it is difficult to alter their structure or the number of reserved extents within the array. As a result, in these conventional approaches, the effective capacity of the arrays is reduced, impacting system performance and frustrating one goal of RAID usage.